package chapter2.src.com.kkb.array;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author : wushikai
 * <p>
 *     Queue是队列，只能一头进，另一头出。
 *
 * 如果把条件放松一下，允许两头都进，两头都出，这种队列叫双端队列（Double Ended Queue），学名Deque。
 *
 * Java集合提供了接口Deque来实现一个双端队列
 *
 * LinkedList真是一个全能选手，它即是List，又是Queue，还是Deque;
 *
 *
 *
将元素添加到队尾或队首：addLast()/offerLast()/addFirst()/offerFirst()；
从队首／队尾获取元素并删除：removeFirst()/pollFirst()/removeLast()/pollLast()；
从队首／队尾获取元素但不删除：getFirst()/peekFirst()/getLast()/peekLast()；
总是调用xxxFirst()/xxxLast()以便与Queue的方法区分开；
避免把null添加到队列。

 *
 * date : 2021-03-15
 */
public class DequeDemo {


    public static void main(String[] args){
        Deque<String> deque = new LinkedList<>();
        deque.offerLast("A"); // A
        deque.offerLast("B"); // A <- B
        deque.offerFirst("C"); // C <- A <- B
        System.out.println(deque.pollFirst()); // C, 剩下A <- B
        System.out.println(deque.pollLast()); // B, 剩下A
        System.out.println(deque.pollFirst()); // A
        System.out.println(deque.pollFirst()); // null
    }

}
